1、pthread_mutex_init
	打开或创建消息队列
	name: 消息队列名称，只能以一个'/'开头，名字中不能包含其他的'/'
	oflag: 打开方式
		O_CREAT 存在则打开，不存在则创建
		O_CREAT|O_EXCL 存在则报错，不存在则创建
		O_RDONLY、O_WRONLY、O_RDWR 只读、只写、读写，3个只能选一个
	mode: 权限
	attr: 属性，为NULL则使用默认属性
	成功返回消息队列句柄，失败返回(mqd_t) -1
	mqd_t mq_open(const char *name, int oflag);
	mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr);
2、mq_close
	关闭消息队列，进程退出时会自动执行关闭
	mqdes: 消息队列句柄
	成功返回0，失败返回-1
	int mq_close(mqd_t mqdes);
3、mq_unlink
	删除消息队列，如果消息队列正在使用则标记为分离状态，直到引用计数为0时才删除
	name: 消息队列名称
	成功返回0，失败返回-1
	int mq_unlink(const char *name);
4、mq_send
	阻塞式发送消息队列
	mqdes: 消息队列句柄
	msg_ptr: 消息内容
	msg_len:消息长度
	msg_prio: 消息优先级
	成功返回0，失败返回-1
	int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio);
5、pthread_mutex_unlock
	指定阻塞时间发送消息
	mqdes: 消息队列句柄
	msg_ptr: 消息内容
	msg_len:消息长度
	msg_prio: 消息优先级
	abs_timeout: 绝对时间
	成功返回0，失败返回-1
	int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec *abs_timeout);
6、pthread_mutexattr_init
	阻塞式接收消息
	mqdes: 消息队列句柄
	msg_ptr: 返回消息内容
	msg_len: 消息缓存长度
	msg_prio: 消息优先级
	成功返回消息的实际长度，失败返回-1
	ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio);
7、mq_timedreceive
	指定阻塞时间接收消息
	mqdes: 消息队列句柄
	msg_ptr: 返回消息内容
	msg_len: 消息缓存长度
	msg_prio: 消息优先级
	abs_timeout: 绝对时间
	成功返回消息的实际长度，失败返回-1
	ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio, const struct timespec *abs_timeout);
8、mq_getattr
	获取消息队列属性
	mqdes: 消息队列句柄
	attr: 返回消息队列属性
	成功返回0，失败返回-1
	int mq_getattr(mqd_t mqdes, struct mq_attr *attr);
9、mq_setattr
	获取消息队列属性
	mqdes: 消息队列句柄
	newattr: 新的消息队列属性
	oldattr: 之前的消息队列属性
	成功返回0，失败返回-1
	int mq_setattr(mqd_t mqdes, const struct mq_attr *newattr, struct mq_attr *oldattr);
10、消息队列属性
	struct mq_attr {
		long mq_flags;       /* 标志，0或O_NONBLOCK,用来表示是否阻塞 */
		long mq_maxmsg;      /* 消息队列的最大消息数 */
		long mq_msgsize;     /* 消息队列中每个消息的最大字节数 */
		long mq_curmsgs;     /* 消息队列中当前的消息数目 */
	};
